#include<iostream>
#include<string>

using namespace std;

#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>

#include<pthread.h>



int main()
{
  if(fork() == 0)
  {
    cout << "子进程替换中" << endl;
    sleep(1);
    //execl("/usr/bin/ls", "ll", "-l", nullptr);
    
    // Both of the following usage are correct
    // The second arguments can have no ./
    execl("./a.out", "./a.out", nullptr);
    execl("./a.out", "a.out", nullptr);
    cout << "替换失败" << endl;
    exit(1);
  }

  cout << "father start to wait" << endl;
  waitpid(-1, nullptr, 0);
  cout << "father wait success" << endl;

  while(1)
  {
    cout << "father running" << endl;
    sleep(1);
  }

  return 0;
}

//void* CallBack(void* args)
//{
//  args = 0;
//  pid_t pid = fork();
//  if(pid == 0)
//  { // child
//    cout << "child process created" << endl;
//    sleep(5);
//    cout << "child process quit" << endl;
//  }
//  else 
//  { // father
//    cout << "child thread doning" << endl;
//    sleep(3);
//    cout << "child thread quit" << endl;
//  }
//
//  return nullptr;
//}
//
//int main()
//{
//  pthread_t tid;
//  pthread_create(&tid, nullptr, CallBack, nullptr);
//
//  while(1)
//  {
//    cout << "main thread running" << endl;
//    sleep(1);
//  }
//
//  pthread_join(tid, nullptr);
//
//  return 0;
//}

//int main()
//{
//  string str1 = "GET";
//  string str2 = "POST";
//  string str3 = "asdb";
//
//  if(str1 != "GET" && str1 != "POST")
//  {
//    cout << str1 << endl;
//  }
//
//  if(str2 != "GET" && str2 != "POST")
//  {
//    cout << str2 << endl;
//  }
//
//  if(str3 != "GET" && str3 != "POST")
//  {
//    cout << str3 << endl;
//  }
//
//
//  if(str1 != "GET" || str1 != "POST")
//  {
//    cout << "||" << str1 << endl;
//  }
//
//  if(str2 != "GET" || str2 != "POST")
//  {
//    cout << "||" << str2 << endl;
//  }
//
//  if(str3 != "GET" || str3 != "POST")
//  {
//    cout << "||" << str3 << endl;
//  }
//
//
//  return 0;
//}
